home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / PARSER / KPARS_00 / FPARSER.DOC next >
Text File  |  1993-09-02  |  6KB  |  149 lines

  1. 
  2.  
  3. FPARSER  (UNIT) LIBRARY REFERENCE
  4.  
  5. ===========================================================================
  6. ---------------------------------------------------------------------------
  7.   Version     - 0.00
  8.  
  9.   File        - FPARSER.PAS
  10.  
  11.   Copyright   - None. Public Domain.
  12.  
  13.   Author      - Keith S. Brown (except where otherwise noted)
  14.                 Surface mail:              Email:(brown@smd4.jsc.nasa.gov)
  15.                   K.Brown
  16.                   Code:NASA/JSC/ES64
  17.                   Houston, TX 77058 (USA)  Voice:713-483-8952
  18.  
  19.   Purpose     - 1. Translate an infix expression to tokenized RPN.
  20.                 2. Execute a tokenized RPN expression.
  21.  
  22.   Language    - Borland International's Turbo Pascal V:4.x+ for MS-DOS
  23.  
  24.   Remarks     - Handles standard Pascal computational assignment expressions.
  25.                 With some differences, ie.:
  26.  
  27.               ■ as per Ada, numeric values may contain embedded underscores.
  28.  
  29.               ■ only the first 63 characters of an identifier are significant
  30.  
  31.               ■ the semi-colon terminating an expression is optional.
  32.  
  33.               ■ the extended unary functions "ArcCos", "ArcSin", "Log"
  34.                 (base 10), "Sign", "Step", "Tan" are available as well as
  35.                 the standard Pascal unary functions "Abs", "ArcTan", "Cos",
  36.                 "Exp", "Ln", "Round", "Sin", "Sqr", "Sqrt", "Trunc".
  37.  
  38.               ■ the extended binary operators "^" (as in x^3, cube of x) are
  39.                 available as well as the standard Pascal binary operators
  40.                 of "+", "-", "*", "/", "DIV", and "MOD".
  41.  
  42.               ■ the extended trinary functions:
  43.                 "Gate(x,cntr,wide:REAL):REAL;"     (rectangular pulse),
  44.                 "Gaus(x,cntr,variance:REAL):REAL;" (Gaussian pulse),
  45.                 "Sinc(x,cntr,wide:REAL):REAL;"     (Sin(πƒx)/(πƒx)) and
  46.                 "Tri(x,cntr,wide:REAL):REAL;"      (Triangular pulse)
  47.                 are available.
  48.  
  49.               ■ The constants "Pi" (3.1415...) and "e" (2.7182...) are predefined.
  50.  
  51.  
  52.               ■ the assignment of the result to a variable is optional.
  53.                 However, if no assignment is made, use EvaluatePostfix
  54.                 instead of ExecutePostfix.
  55.  
  56.   Requires    - Turbo Power Professional's TPSTRING unit --> basic string handling
  57.                 (requires proc/functs: DisposeString, LeftPad, Str2Real, StringFromHeap, StringToHeap)
  58.                 KSTRING.PAS --> extended string handling
  59.                 KMATH.PAS   --> math functions
  60.  
  61.    Example:
  62.       BEGIN
  63.         InitSymbolTable;
  64.  
  65.         DefineParameter('y',30.0);
  66.         DefineParameter('x',0);
  67.  
  68.         IF TranslateToPostfix('x := Sin(y*Pi/180);') THEN
  69.           IF ExecutePostFix THEN
  70.             WriteLn('Result = ',ViewParameter('x'));
  71.       END;
  72.  
  73.    Example:
  74.       VAR
  75.         x : REAL;
  76.       BEGIN
  77.         InitSymbolTable;
  78.  
  79.         DefineParameter('y',30.0);
  80.  
  81.         IF TranslateToPostfix('Sin(y*Pi/180);') THEN
  82.           IF EvaluatePostFix(x) THEN
  83.             WriteLn('Result = ',x);
  84.       END;
  85.  
  86.   Reference   - Data Structures & Program Design, Robert L. Kruse
  87.                 (Chptr 8: The Polish Notation) pp311-355
  88.  
  89.   Revised     - 1991.0618 (KSB) Converted from GF and made a unit.
  90.               - 1993.0901 (KSB) Updated documentation.
  91. ---------------------------------------------------------------------------
  92.  
  93. ===========================================================================
  94. DefineParameter procedure
  95. ---------------------------------------------------------------------------
  96.   Purpose     - If S is not defined add it with its value V to the symbol
  97.                 table. If it is found, change its value to V.
  98.  
  99.   Declaration - procedure DefineParameter(s:STRING; v:REAL);
  100. ---------------------------------------------------------------------------
  101.  
  102. ===========================================================================
  103. EvaluatePostfix function
  104. ---------------------------------------------------------------------------
  105.   Purpose     - Interpret a RPN expression when the result is not assigned
  106.                 to a variable.
  107.  
  108.   Declaration - function EvaluatePostfix(VAR x:REAL):BOOLEAN;
  109. ---------------------------------------------------------------------------
  110.  
  111. ===========================================================================
  112. ExecutePostfix function
  113. ---------------------------------------------------------------------------
  114.   Purpose     - Interpret a RPN expression.
  115.  
  116.   Declaration - function ExecutePostfix:BOOLEAN;
  117. ---------------------------------------------------------------------------
  118.  
  119. ===========================================================================
  120. InitSymbolTable procedure
  121. ---------------------------------------------------------------------------
  122.   Purpose     - Initialize the defaults in the symbol table.
  123.  
  124.   Declaration - procedure InitSymbolTable.
  125.  
  126.   Remarks     - Must be called first to initialize symbols and operators.
  127. ---------------------------------------------------------------------------
  128.  
  129. ===========================================================================
  130. TranslateToPostfix function
  131. ---------------------------------------------------------------------------
  132.   Purpose     - Translate an infix expression to RPN.
  133.  
  134.   Declaration - function TranslateToPostfix(s:STRING):BOOLEAN;
  135.  
  136.   Remarks     - The infix expression is first tokenized. However, all
  137.                 identifiers must be previously declared.
  138. ---------------------------------------------------------------------------
  139.  
  140. ===========================================================================
  141. ViewParameter function
  142. ---------------------------------------------------------------------------
  143.   Purpose     - If S is not defined display an error message.  If it is
  144.                 found, return its value.
  145.  
  146.   Declaration - function ViewParameter(s:STRING):REAL;
  147. ---------------------------------------------------------------------------
  148.  
  149.